package com.ggh.jinjilive.remotedata.systemapi;

import com.ggh.jinjilive.mobile.Pay.WeChatPayMobile;
import com.ggh.jinjilive.mobile.ResultEntity;
import com.ggh.jinjilive.mobile.UserMobile;
import com.ggh.jinjilive.mobile.CommonMobile;
import com.ggh.jinjilive.mobile.create.StartLiveMobile;
import com.ggh.jinjilive.mobile.home.live.LiveCategory;
import com.ggh.jinjilive.mobile.home.live.LiveList;
import com.ggh.jinjilive.mobile.home.video.VideoDetails;
import com.ggh.jinjilive.mobile.home.video.VideoList;
import com.ggh.jinjilive.mobile.home.voice.VoiceHot;
import com.ggh.jinjilive.mobile.live.GiftEntityMobile;
import com.ggh.jinjilive.mobile.live.LiveMessageMobile;
import com.ggh.jinjilive.mobile.live.MusicList;
import com.ggh.jinjilive.mobile.live.SellGoodsMobile;
import com.ggh.jinjilive.mobile.live.SendGiftMobole;
import com.ggh.jinjilive.mobile.login.LoginMobile;
import com.ggh.jinjilive.mobile.mall.MallCommunityLIst;
import com.ggh.jinjilive.mobile.mall.MallGoods;
import com.ggh.jinjilive.mobile.mall.MallPointsClass;
import com.ggh.jinjilive.mobile.mall.collection.CollectionModule;
import com.ggh.jinjilive.mobile.mall.goods.GoodsDetailsMobile;
import com.ggh.jinjilive.mobile.mall.goods.thegoods.TheGoodsAddressMobile;
import com.ggh.jinjilive.mobile.mall.order.MineOrder;
import com.ggh.jinjilive.mobile.mall.shop.AttentionShopMobile;
import com.ggh.jinjilive.mobile.mall.shop.MineShopOrder;
import com.ggh.jinjilive.mobile.mall.shop.MineShopOrderTask;
import com.ggh.jinjilive.mobile.mall.shop.ShopMessageMobile;
import com.ggh.jinjilive.mobile.mall.shopping.ShopMessageMoblie;
import com.ggh.jinjilive.mobile.mine.DiamondMobile;
import com.ggh.jinjilive.mobile.mine.LevelMobile;
import com.ggh.jinjilive.mobile.mine.MembersMobile;
import com.ggh.jinjilive.mobile.mine.TradingDetailMobile;
import com.ggh.jinjilive.mobile.mine.personal.DressUpDataMobile;
import com.ggh.jinjilive.mobile.mine.personal.PersonalDataMobile;
import com.ggh.jinjilive.mobile.mine.ranking.RankingBangModel;
import com.ggh.jinjilive.mobile.mine.video.PersonalVideoList;
import com.ggh.jinjilive.mobile.mine.zhubo.InvitationShareModel;
import com.ggh.jinjilive.mobile.mine.zhubo.LiuShuiDetailsModel;
import com.ggh.jinjilive.mobile.mine.zhubo.ZhuBoEarningsMobile;
import com.ggh.jinjilive.mobile.mine.zhubo.ZhuBoStatementMobile;
import com.ggh.jinjilive.mobile.social.near.NearLive;
import com.ggh.jinjilive.mobile.social.near.NearUser;
import com.ggh.jinjilive.mobile.social.visitors.VisitorsRecord;

import java.util.List;
import java.util.Map;

import io.reactivex.Observable;
import okhttp3.MultipartBody;
import retrofit2.http.Body;
import retrofit2.http.Multipart;
import retrofit2.http.POST;
import retrofit2.http.Part;

public interface SystemApiService {
    //获取用户数据
    @POST("login/login")
    Observable<ResultEntity<LoginMobile>> login(@Body Map<String, Object> params);
    //获取用户数据
    @POST("info/mydata")
    Observable<ResultEntity<UserMobile>> mydata(@Body Map<String, Object> params);
    //直播间类目
    @POST("live/liveCateGory")
    Observable<ResultEntity<List<LiveCategory>>> liveCateGory(@Body Map<String, Object> params);
    //直播间列表
    @POST("other/liveList")
    Observable<ResultEntity<List<LiveList>>> liveList(@Body Map<String, Object> params);
    //视频列表
    @POST("video/VideoCategory")
    Observable<ResultEntity<List<LiveCategory>>> VideoCategory();
    //获取视频列表
    @POST("video/videoList")
    Observable<ResultEntity<List<VideoList>>> videoList(@Body Map<String, Object> params);
    //语音房类目
    @POST("Voice/voiceCateList")
    Observable<ResultEntity<List<LiveCategory>>> voiceCateList(@Body Map<String, Object> params);
    //语音房热门
    @POST("voice/hotList")
    Observable<ResultEntity<List<VoiceHot>>> hotList(@Body Map<String, Object> params);
    //语音房热门列表
    @POST("voice/list")
    Observable<ResultEntity<List<VoiceHot>>> list(@Body Map<String, Object> params);
    //关注列表
    @POST("live/followList")
    Observable<ResultEntity<List<LiveList>>> followList(@Body Map<String, Object> params);
    //附近用户
    @POST("live/nearbyUser")
    Observable<ResultEntity<List<NearUser>>> nearbyUser(@Body Map<String, Object> params);
    //更新地图经纬度
    @POST("info/newUpdateMap")
    Observable<ResultEntity<String>> newUpdateMap(@Body Map<String, Object> params);
    //附近直播列表
    @POST("live/nearbyLive")
    Observable<ResultEntity<List<NearLive>>> nearbyLive(@Body Map<String, Object> params);
    //访客记录
    @POST("live/accessList")
    Observable<ResultEntity<List<VisitorsRecord>>> accessList(@Body Map<String, Object> params);
    //商城分类
    @POST("commodity.Product/productType")
    Observable<ResultEntity<List<MallPointsClass>>> productType(@Body Map<String, Object> params);
    //商城商品
    @POST("commodity.Product/productList")
    Observable<ResultEntity<List<MallGoods>>> productList(@Body Map<String, Object> params);
    //社区市场
    @POST("commodity.Other/communityList")
    Observable<ResultEntity<List<MallCommunityLIst>>> communityList(@Body Map<String, Object> params);
    //签到
    @POST("info/signIn")
    Observable<ResultEntity<Object>> signIn();
    //直播间类目
    @POST("live/liveCateGory")
    Observable<ResultEntity<List<LiveCategory>>> liveCateGory();

    /**
     * 直播接口
     * @param parts
     * @return
     */
    //上传封面图接口
    @Multipart
    @POST("other/uploadimages")
    Observable<ResultEntity<CommonMobile>> uploadimages(@Part MultipartBody.Part parts);

    //批量上传封面图接口
    @Multipart
    @POST("other/uploadimages")
    Observable<ResultEntity<Object>> uploadimages(@Part List<MultipartBody.Part> parts);

    //生成直播推流地址 接口
    @POST("live/openLive")
    Observable<ResultEntity<StartLiveMobile>> openLive(@Body Map<String, Object> params);
    //获取音乐列表
    @POST("other/songList")
    Observable<ResultEntity<List<MusicList>>> songList(@Body Map<String, Object> params);
    //获取音乐地址
    @POST("other/playSong")
    Observable<ResultEntity<String>> playSong(@Body Map<String, Object> params);
    //更新直播人数
    @POST("Other/realLiveUpdate")
    Observable<ResultEntity<Object>> realLiveUpdate(@Body Map<String, Object> params);
    //直播间信息
    @POST("live/anchorView")
    Observable<ResultEntity<LiveMessageMobile>> anchorView(@Body Map<String, Object> params);
    //收到请求跨房 PK 通知
    @POST("live/livePk")
    Observable<ResultEntity<List<StartLiveMobile>>> livePk(@Body Map<String, Object> params);
    //获取服务器时间
    @POST("live/getServiceTime")
    Observable<ResultEntity<Integer>> getServiceTime(@Body Map<String, Object> params);
    //领取直播间红包雨
    @POST("my/getRedsrain")
    Observable<ResultEntity<LiveMessageMobile>> getRedsrain(@Body Map<String, Object> params);
    //领取平台红包雨
    @POST("my/getRedsrains")
    Observable<ResultEntity<LiveMessageMobile>> getRedsrains(@Body Map<String, Object> params);
    //进入直播间
    @POST("live/theLiveView")
    Observable<ResultEntity<StartLiveMobile>> theLiveView(@Body Map<String, Object> params);
    //主播接的任务列表
    @POST("commodity.task/myTaskList")
    Observable<ResultEntity<List<SellGoodsMobile>>> myTaskList(@Body Map<String, Object> params);
    //任务列表
    @POST("commodity.Task/taskList")
    Observable<ResultEntity<List<SellGoodsMobile>>> TaskTaskList(@Body Map<String, Object> params);

    //修改任务状态（是否带货中）
    @POST("commodity.task/taskInfo")
    Observable<ResultEntity<Object>> taskInfo(@Body Map<String, Object> params);
    //主播结束任务
    @POST("commodity.task/finishTask")
    Observable<ResultEntity<Object>> finishTask(@Body Map<String, Object> params);


    //用户端正在带货的商品
    @POST("commodity.task/userTaskInfo")
    Observable<ResultEntity<SellGoodsMobile>> userTaskInfo(@Body Map<String, Object> params);

    /**
     * 礼物列表
     */
    //礼物列表
    @POST("my/giftlist")
    Observable<ResultEntity<GiftEntityMobile>> giftlist(@Body Map<String, Object> params);
    // 直播间发送礼物
    @POST("live/givingGift")
    Observable<ResultEntity<SendGiftMobole>> givingGift(@Body Map<String, Object> params);


    /**
     * 视频
     */
    // 获取视频详情
    @POST("video/videoView")
    Observable<ResultEntity<VideoDetails>> videoView(@Body Map<String, Object> params);
    //视频 详情处理  关注， 评论， 喜欢，分享
    @POST("video/videoTop")
    Observable<ResultEntity<VideoDetails>> videoTop(@Body Map<String, Object> params);



    /**
     * 商城商品
     */
    //获取商品详情
    @POST("commodity.Product/productInfo")
    Observable<ResultEntity<GoodsDetailsMobile>> productInfo(@Body Map<String, Object> params);
    //取消收藏成功
    @POST("commodity.Other/delCollectProduct")
    Observable<ResultEntity<Object>> delCollectProduct(@Body Map<String, Object> params);
    //收藏成功
    @POST("commodity.Other/addCollectProduct")
    Observable<ResultEntity<Object>> addCollectProduct(@Body Map<String, Object> params);
    //加入购物车
    @POST("commodity.Order/addCart")
    Observable<ResultEntity<Object>> addCart(@Body Map<String, Object> params);

    /**
     * 确认订单
     */
    //获取收货地址
    @POST("commodity.Other/receiveAddressList")
    Observable<ResultEntity<List<TheGoodsAddressMobile>>> receiveAddressList(@Body Map<String, Object> params);
    //地址添加成功
    @POST("commodity.Other/addReceiveAddress")
    Observable<ResultEntity<Object>> addReceiveAddress(@Body Map<String, Object> params);
    //修改地址
    @POST("commodity.Other/editReceiveAddress")
    Observable<ResultEntity<Object>> editReceiveAddress(@Body Map<String, Object> params);
    //删除地址
    @POST("commodity.Other/delReceiveAddress")
    Observable<ResultEntity<Object>> delReceiveAddress(@Body Map<String, Object> params);
    //添加订单
    @POST("commodity.Order/addOrder")
    Observable<ResultEntity<CommonMobile>> addOrder(@Body Map<String, Object> params);
    //生成微信付款信息
    @POST("commodity.Order/payOrder")
    Observable<ResultEntity<WeChatPayMobile>> weChatpayOrder(@Body Map<String, Object> params);
    //生成支付宝付款信息
    @POST("commodity.Order/payOrder")
    Observable<ResultEntity<String>> alipayPayOrder(@Body Map<String, Object> params);
    /**
     * 个人资料
     */

    //查询个人资料
    @POST("video/anchorView")
    Observable<ResultEntity<PersonalDataMobile>> videoAnchorView(@Body Map<String, Object> params);
    //关注
    @POST("my/follow")
    Observable<ResultEntity<PersonalDataMobile>> myFollow(@Body Map<String, Object> params);
    //获取当前用户发布的视频
    @POST("info/videoList")
    Observable<ResultEntity<List<PersonalVideoList>>> infoVideoList(@Body Map<String, Object> params);
    /**
     * 购物车
     */
    //购物车列表
    @POST("commodity.Order/cartList")
    Observable<ResultEntity<List<ShopMessageMoblie>>> cartList(@Body Map<String, Object> params);
    //更新购物车数量
    @POST("commodity.Order/editCartNumber")
    Observable<ResultEntity<Object>> editCartNumber(@Body Map<String, Object> params);
    //删除购物车商品
    @POST("commodity.Order/delCart")
    Observable<ResultEntity<Object>> delCart(@Body Map<String, Object> params);
    /**
     * 我的订单
     */
    //我的订单
    @POST("commodity.Order/orderList")
    Observable<ResultEntity<List<MineOrder>>> orderList(@Body Map<String, Object> params);
    /**
     * 收藏
     */
    //收藏列表
    @POST("commodity.Other/collectProductList")
    Observable<ResultEntity<List<CollectionModule>>> collectProductList(@Body Map<String, Object> params);
    /**
     * 店铺
     */

    //店铺信息
    @POST("shop.Store/storeInfo")
    Observable<ResultEntity<ShopMessageMobile>> StoreStoreInfo();

    //店铺信息
    @POST("commodity.Other/storeInfo")
    Observable<ResultEntity<ShopMessageMobile>> storeInfo(@Body Map<String, Object> params);
    //添加关注
    @POST("commodity.Other/addCollectStore")
    Observable<ResultEntity<Object>> addCollectStore(@Body Map<String, Object> params);
    //取消关注
    @POST("commodity.Other/delCollectStore")
    Observable<ResultEntity<Object>> delCollectStore(@Body Map<String, Object> params);
    //关注店铺列表
    @POST("commodity.Other/collectStoreList")
    Observable<ResultEntity<List<AttentionShopMobile>>> collectStoreList(@Body Map<String, Object> params);
    //获取店铺状态
    @POST("shop.Store/checkStoreStatus")
    Observable<ResultEntity<CommonMobile>> checkStoreStatus();

    //获取店铺状态
    @POST("shop.Order/orderList")
    Observable<ResultEntity<List<MineShopOrder>>> shopOrderList(@Body Map<String, Object> params);
    //获取店铺任务
    @POST("shop.Task/taskList")
    Observable<ResultEntity<List<MineShopOrderTask>>> shopTaskList(@Body Map<String, Object> params);

    //商城商品
    @POST("shop.Product/productList")
    Observable<ResultEntity<List<MallGoods>>> shopProductList(@Body Map<String, Object> params);
    //上架商品
    @POST("shop.Product/editProduct")
    Observable<ResultEntity<Object>> editProduct(@Body Map<String, Object> params);
    //修改店铺信息
    @POST("shop.Store/storeEdit")
    Observable<ResultEntity<Object>> shopStoreStoreEdit(@Body Map<String, Object> params);


    //社区公约
    @POST("agreement/community")
    Observable<ResultEntity<CommonMobile>> agreementCommunity();
    //隐私政策
    @POST("agreement/privacy")
    Observable<ResultEntity<CommonMobile>> agreementPrivacy();
    //服务条例
    @POST("agreement/service")
    Observable<ResultEntity<CommonMobile>> agreementService();
    //联系我们
    @POST("agreement/contactus")
    Observable<ResultEntity<CommonMobile>> agreementContactus();
    //主播协议
    @POST("agreement/anchor")
    Observable<ResultEntity<CommonMobile>> agreementAnchor();
    //法律法规
    @POST("agreement/law")
    Observable<ResultEntity<CommonMobile>> agreementLaw();
    //市场规范
    @POST("agreement/market")
    Observable<ResultEntity<CommonMobile>> agreementMarket();
    //开店入驻协议
    @POST("agreement/shop")
    Observable<ResultEntity<CommonMobile>> agreementShop();

    //修改生日
    @POST("info/savebirthday")
    Observable<ResultEntity<CommonMobile>> infoSavebirthday(@Body Map<String, Object> params);

    //修改图片
    @POST("info/saveheadportrait")
    Observable<ResultEntity<CommonMobile>> infoSaveheadportrait(@Body Map<String, Object> params);

    //头像框
    @POST("info/FrameList")
    Observable<ResultEntity<List<DressUpDataMobile>>> infoFrameList(@Body Map<String, Object> params);
    //购买装扮和使用
    @POST("info/saveFrame")
    Observable<ResultEntity<CommonMobile>> infoSaveFrame(@Body Map<String, Object> params);

    //获取会员列表
    @POST("info/viplist")
    Observable<ResultEntity<List<MembersMobile>>> infoViplist();

    //生成会员充值订单
    @POST("my/buyVip")
    Observable<ResultEntity<CommonMobile>> myBuyVip(@Body Map<String, Object> params);
    //生成微信付款信息
    @POST("my/pay")
    Observable<ResultEntity<WeChatPayMobile>> WeChatMyPay(@Body Map<String, Object> params);
    //生成支付宝付款信息
    @POST("my/pay")
    Observable<ResultEntity<String>> alipayMyPay(@Body Map<String, Object> params);

    //生成支付宝付款信息
    @POST("auth/buylist")
    Observable<ResultEntity<CommonMobile>> authBuylist(@Body Map<String, Object> params);

    //钻石充值生成订单
    @POST("my/buyDiamond")
    Observable<ResultEntity<CommonMobile>> myBuyDiamond(@Body Map<String, Object> params);

    //获取主播收益
    @POST("Anchor/anchorIncome")
    Observable<ResultEntity<ZhuBoEarningsMobile>> AnchorAnchorIncome();
    //主播报表
    @POST("Anchor/authReport")
    Observable<ResultEntity<ZhuBoStatementMobile>> AnchorAuthReport();
    //日报表
    @POST("Anchor/dayReport")
    Observable<ResultEntity<ZhuBoStatementMobile>> AnchorDayReport(@Body Map<String, Object> params);
    //周报表
    @POST("Anchor/weekReport")
    Observable<ResultEntity<ZhuBoStatementMobile>> AnchorWeekReport(@Body Map<String, Object> params);
    //月报表
    @POST("Anchor/monthReport")
    Observable<ResultEntity<ZhuBoStatementMobile>> AnchorMonthReport(@Body Map<String, Object> params);
    //钻石流水
    @POST("Anchor/weekSilverDetail")
    Observable<ResultEntity<List<LiuShuiDetailsModel>>> AnchorWeekSilverDetail(@Body Map<String, Object> params);
    //我的邀请
    @POST("info/share")
    Observable<ResultEntity<InvitationShareModel>> infoShare();
    //获取排行榜列表
    @POST("info/rankingList")
    Observable<ResultEntity<List<RankingBangModel>>> infoRankingList(@Body Map<String, Object> params);

    //私密
    @POST("video/setPrivate")
    Observable<ResultEntity<CommonMobile>> videoSetPrivate(@Body Map<String, Object> params);
    //设置视频评论区是否可见
    @POST("video/setcomment")
    Observable<ResultEntity<CommonMobile>> videoSetcomment(@Body Map<String, Object> params);
    //删除视频
    @POST("info/delVideo")
    Observable<ResultEntity<CommonMobile>> infoDelVideo(@Body Map<String, Object> params);
    //我的收益
    @POST("info/earnings")
    Observable<ResultEntity<CommonMobile>> infoEarnings();
    //积分兑换钻石
    @POST("info/ybdhzs")
    Observable<ResultEntity<CommonMobile>> infoYbdhzs(@Body Map<String, Object> params);
    //交易记录
    @POST("info/logList")
    Observable<ResultEntity<List<TradingDetailMobile>>> infoLogList(@Body Map<String, Object> params);
    //主播等级
    @POST("auth/myuserlevel")
    Observable<ResultEntity<LevelMobile>> authMyuserlevel();
    //用户等级
    @POST("auth/myanchorlevel")
    Observable<ResultEntity<LevelMobile>> authMyanchorlevel();
    //用户等级列表
    @POST("other/userlevellist")
    Observable<ResultEntity<List<LevelMobile>>> otherUserlevellist();
    //主播等级列表
    @POST("other/anchorlevellist")
    Observable<ResultEntity<List<LevelMobile>>> otherAnchorlevellist();


    //收到礼物明细
    @POST("info/giftDetail")
    Observable<ResultEntity<List<DiamondMobile>>> infoGiftDetail(@Body Map<String, Object> params);
    //直播时长明细
    @POST("info/liveDetail")
    Observable<ResultEntity<List<DiamondMobile>>> infoLiveDetail(@Body Map<String, Object> params);
}
